package com.example.routeplansystem.dao;

import com.example.routeplansystem.entity.po.NodePojo;
import com.example.routeplansystem.entity.po.QuestionNodePojo;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author 唐海军
 * @create 2022-07-23 16:00
 */

@Repository
public interface QuestionNodeDao {


    List<QuestionNodePojo> selectNodesExcludeCenter(Integer questionId);

    List<QuestionNodePojo> selectCenterNode(Integer questionId);

    List<QuestionNodePojo> selectAllNode(Integer questionId);

    /**
     * 插入一条数据
     *
     * @param questionNodePojo
     * @return
     */
    boolean insertQuestionNode(QuestionNodePojo questionNodePojo);

    /**
     * 批量导入和问题对应的客户信息
     * @param questionNodePojos
     * @return
     */
    boolean insertQuestionNodeBatch(@Param("list") List<QuestionNodePojo> questionNodePojos);

    /**
     * 通过questionID删除对应的数据
     *
     * @param questionId
     * @return
     */
    boolean deleteQuestionNodeByQuestionId(Integer questionId);

    /**
     * 通过nodeId删除对应数据，慎用，会删除该点在该表中的所有问题的对应数据
     *
     * @param nodeId
     * @return
     */
    boolean deleteQuestionNodeByNodeId(Integer nodeId);

    /**
     * 通过问题Id和nodeId删除记录
     *
     * @param nodeId
     * @param questionId
     * @return
     */
    boolean deleteQuestionNodeByNodeIdAndQuestionId(Integer nodeId, Integer questionId);

    /**
     * 计算该点在表中的出现次数
     *
     * @param nodeId
     * @return
     */
    Integer selectNodeCountsByNodeId(Integer nodeId);

    QuestionNodePojo selectByQuestionIdAndNodeId(Integer questionId,Integer nodeId);

    /**
     * 通过questionId和nodeId获取iscenter的值
     *
     * @param questionId
     * @param nodeId
     * @return
     */
    Integer selectIsCenterByQuestionIdAndNodeId(Integer questionId, Integer nodeId);

    /**
     * 更新某点
     *
     * @param questionNodePojo
     * @return
     */
    Integer updateQuestionNode(QuestionNodePojo questionNodePojo);

    /**
     * 设置需求量
     * @param questionNodePojo
     * @return
     */
    Integer setDemand(QuestionNodePojo questionNodePojo);

    /**
     *获取该点的需求量
     * @param questionId
     * @param nodeId
     * @return
     */
    Float getDemand(Integer questionId, Integer nodeId);

    Integer batchRemove(Integer questionId, List<Integer> nodeIdList);
}
